home *** CD-ROM | disk | FTP | other *** search
/ FM Towns: Free Software Collection 10 / FM Towns Free Software Collection 10.iso / ms_dos / game / add / add.c < prev    next >
C/C++ Source or Header  |  1995-02-19  |  55KB  |  2,111 lines

  1.  
  2. /***************************************************************************/
  3. /* ******                                                           ****** */
  4. /*****                           ~ADD~                            *****/
  5. /***                                                                     ***/
  6. /***                for FM-TOWNS  FREE WARE COLLECTION 10                ***/
  7. /***                                                                     ***/
  8. /***                      1995/ 1/15 --> 1995/ 2/20                      ***/
  9. /***                                                                     ***/
  10. /*****                 Produced and Copyright  KIKURIN                 *****/
  11. /* ******                                                           ****** */
  12. /***************************************************************************/
  13.  
  14. #define   Gput640_DISK_to_VRAM     Gput_DISK_to_VRAM
  15. #define   beep                     beep_FM
  16. //#define   beep                     beep_PC
  17.  
  18. #define   WIN_MAX         15     /* 総ウィンドウ数 */
  19. #define   BUT_MAX        146     /* 総ボタン数   */
  20.  
  21. #include <stdio.h>
  22. #include <stdlib.h>
  23. #include <math.h>
  24. #include <time.h>
  25. #include <string.h>
  26. #include "ESC.H"          /* 私製エスケープシーケンスマクロ       */
  27. #include "GBC.H"          /* 私製グラフィックデバイスアクセス関数ヘッダ */
  28. #include "MBC.H"          /* 私製マウスBIOSアクセス関数ヘッダ    */
  29. #include "MOS_WAIT.H"     /* 私製マウスウエイト関数ヘッダ        */
  30. #include "WINDOW.H"       /* 私製ウィンドウ管理関数ヘッダ        */
  31. #include "VRAM_CNT.H"     /* 私製VRAMアクセス関数ヘッダ       */
  32. #include "WIN_EXP.H"      /* WINDOW拡張機能関数          */
  33.  
  34. #define   CARD_ALL        60     /* 総カード数(内-52はラッキーC) */
  35.  
  36. #define   PLAY_HUMAN    0x00
  37. #define   PLAY_COM      0x01
  38. #define   PLAY_REST     0x02
  39.  
  40. #define   COND_FLAT       -1
  41. #define   COND_PLAY        0
  42. #define   COND_WIN         1
  43.  
  44. #define   FADE_SPEED      16     /* FADE IN/OUTスピード   */
  45.  
  46. char      GBC_work[8192];        /* GBC作業域            */
  47. char      ADD_work[2048];        /* ゲーム作業域            */
  48. char      NUM_work[11][800];     /* CG作業域             */
  49.  
  50. int  wind[WIN_MAX];
  51.  
  52. int  TARGET_P    =  0;           /* ターゲットプレイヤー        */
  53. int  END_FLAG    =  0;           /* プログラム終了フラグ        */
  54. int  ADD_FLAG    =  0;           /* ゲーム終了フラグ          */
  55. int  POUR_FLAG   =  0;           /* 流しフラグ             */
  56. int  WIN_FLAG    =  0;           /* 勝者フラグ             */
  57.  
  58. char  PAL[16][ 3]       ;        /* パレット作業域           */
  59. char *KEY_BOARD         ;        /* 平仮名文字列記憶域         */
  60. char  DUM_NAME[10]      ;        /* 名前入力作業域           */
  61. char  NAME_LNG          ;        /* 名前長               */
  62. char *MOJ_WORK[]        ;        /* メッセージ作業域          */
  63. int   KEY_NUM           ;        /* キーナンバー(-1で無し)     */
  64. int   PLY_NUM           ;        /* 実際にプレイしてる人数       */
  65. int   LIFE_NUM          ;        /* 残りプレイヤー数          */
  66. int   PASS_NUM          ;        /* パスのカウント           */
  67. int   LUC_NUM           ;
  68. int   M_CARD            ;        /* 山のカード残数           */
  69. char  CHK_CARD[CARD_ALL];        /* 各カードの位置           */
  70.                  /* 0:山 1:プレイヤーの手元    */
  71.                  /* 2:捨てられた 3:捨てたばかり  */
  72. char  SEL_CARD[20]      ;        /* 手持ちカードの選択(1:選択)   */
  73. char  SEL_ONLY[ 3]      ;        /* 選択カードの抽出          */
  74.  
  75. struct PLD_1 {
  76.  
  77.     unsigned char Name[10];
  78.     unsigned int  Face;
  79.     unsigned int  Money;
  80.     unsigned int  Win,Lose;
  81.     unsigned int  Play;
  82.  
  83. } P_DATA1[ 4];                   /* プレイヤーデータ その1      */
  84.  
  85. struct PLD_2 {
  86.  
  87.     unsigned int  Player;
  88.     unsigned int  Life;      /* -1:dead  0:Playing  1:win */
  89.     unsigned int  Card_num;
  90.     unsigned int  Card[20];
  91.       signed int  Adjust;
  92.  
  93. } P_DATA2[ 4];                   /* プレイヤーデータ その2      */
  94.  
  95. char *val_to_moj( unsigned,char *,char );
  96.  
  97. main()
  98. {
  99.     init();
  100.  
  101.     ADD_title();
  102.  
  103.     window_open(  1 );
  104.  
  105.     screen_fade_in();
  106.  
  107.     while ( END_FLAG== 0 )
  108.  
  109.     if ( button_wait(  0 )== 0 )     window_sub();
  110.  
  111.     screen_fade_out();
  112.  
  113.     __screen(  1, 1 );     __gcls();
  114.     __screen(  0, 0 );     __gcls();
  115.  
  116.     cls;
  117.  
  118.     cursor_ON();
  119.  
  120.     beep( 1200, 0 );
  121. }
  122.  
  123. /***************************************************************************
  124.                 イニシャライズ               
  125.  ***************************************************************************/
  126.  
  127. init()
  128. {
  129.     int  _lp;
  130.  
  131.     cursor_OFF();
  132.  
  133.     cls;
  134.  
  135.     __gbc_user( GBC_work,8192 );
  136.  
  137.     __back_color( 14 );
  138.  
  139.     for ( _lp= 0;_lp<16;_lp++ )
  140.  
  141.     __palette( _lp, 0, 0, 0 );
  142.  
  143.     __screen(  1, 0 );
  144.  
  145.     Gput640_DISK_to_VRAM( "NUMBERS.CG",  0,  0 );
  146.  
  147.     for ( _lp= 0;_lp<11;_lp++ )
  148.  
  149.     VRAM_Gget(  40*_lp,  0, 40, 40,NUM_work[_lp] );
  150.  
  151.     Gput640_DISK_to_VRAM( "CARD.CG",  0,  0 );
  152.  
  153.     __screen(  0, 0 );
  154.  
  155.     MOUSE_SETUP;
  156.     MOUSE_ON   ;
  157.  
  158.     window_init( WIN_MAX );
  159.  
  160.     window_memory_switch( _MEMORY_OFF );
  161. }
  162.  
  163. /***************************************************************************
  164.       画面描画 01~10 & 整数->全角文字列変換関数      
  165.  ***************************************************************************/
  166.  
  167. screen_01( char _num )
  168. {
  169.     int  _dsx1,_dsy1,_dsx2,_dsy2;
  170.  
  171.     _dsx1= 48+192*( P_DATA1[_num].Face %  3 );
  172.     _dsy1=256+ 64*( P_DATA1[_num].Face /  3 );
  173.     _dsx2= 24+304*(         _num       %  2 );
  174.     _dsy2=144+120*(         _num       /  2 );
  175.  
  176.     ADD_Gcopy( _dsx1,_dsy1, 64, 64,_dsx2+ 16,_dsy2+ 32 );
  177.  
  178.     __line( _dsx2+192,_dsy2+ 12, 63, 15,_PSET,14,_FULL,_BETA,14 );
  179.     __line( _dsx2+192,_dsy2+ 36, 79, 15,_PSET,14,_FULL,_BETA,14 );
  180.     __line( _dsx2+176,_dsy2+ 60, 31, 15,_PSET,14,_FULL,_BETA,14 );
  181.     __line( _dsx2+224,_dsy2+ 60, 31, 15,_PSET,14,_FULL,_BETA,14 );
  182.     __line( _dsx2+176,_dsy2+ 84, 95, 15,_PSET,14,_FULL,_BETA,14 );
  183.  
  184.     __symbol( _dsx2+192,_dsy2+ 12,P_DATA1[_num].Name, 1, 1, 3, 0,_PSET, 0 );
  185.     __symbol( _dsx2+192,_dsy2+ 36,val_to_moj( P_DATA1[_num].Money,ADD_work, 5 ), 1, 1, 3, 0,_PSET, 0 );
  186.     __symbol( _dsx2+176,_dsy2+ 60,val_to_moj( P_DATA1[_num].Win  ,ADD_work, 2 ), 1, 1, 3, 0,_PSET, 0 );
  187.     __symbol( _dsx2+224,_dsy2+ 60,val_to_moj( P_DATA1[_num].Lose ,ADD_work, 2 ), 1, 1, 3, 0,_PSET, 0 );
  188.     __symbol( _dsx2+176,_dsy2+ 84,MOJ_WORK[P_DATA1[_num].Play], 1, 1, 3, 0,_PSET, 0 );
  189. }
  190.  
  191. char *val_to_moj( unsigned _val,char *_ret,char _siz )
  192. {
  193.     char *_num="0123456789";
  194.     long  _wei=( long )pow( 10.0,( double )( _siz- 1 ) );
  195.  
  196.     *_ret='\0';
  197.  
  198.     for ( ;_siz> 0;_siz-- ) {
  199.  
  200.     if ( _wei>_val && _wei> 1 )
  201.  
  202.         strcat( _ret," " );
  203.  
  204.     else
  205.  
  206.         strncat( _ret,_num+ 2*( ( int )( _val/_wei ) % 10 ), 2 );
  207.  
  208.     _wei/=10;
  209.     }
  210.     return ( _ret );
  211. }
  212.  
  213. screen_02()
  214. {
  215.     __line(  32, 16, 63, 15,_PSET,14,_FULL,_BETA,14 );
  216.  
  217.     __symbol(  32, 16,DUM_NAME, 1, 1, 5, 0,_PSET, 0 );
  218. }
  219.  
  220. screen_03()
  221. {
  222.     int  _dsx1,_dsy1,_dsx2,_dsy2,_lp,_num;
  223.  
  224.     get_window_xy(  8 );
  225.  
  226.     for ( _lp= 0;_lp<PLY_NUM;_lp++ ) {
  227.  
  228.     _num =               P_DATA2[_lp ].Player     ;
  229.     _dsx1=      48+192*( P_DATA1[_num].Face %  3 );
  230.     _dsy1=     256+ 64*( P_DATA1[_num].Face /  3 );
  231.     _dsx2=_wsx                                    ;
  232.     _dsy2=_wsy+ 64+ 80*(         _lp             );
  233.  
  234.     box_frame( _dsx2+  7,_dsy2+  7, 65, 65,_ON );
  235.  
  236.     ADD_Gcopy( _dsx1,_dsy1, 64, 64,_dsx2+  8,_dsy2+  8 );
  237.  
  238.     __symbol( _dsx2+ 80,_dsy2+  8,"なまえ", 1, 1, 3, 0,_PSET, 0 );
  239.     __symbol( _dsx2+ 80,_dsy2+ 40,"持ち金", 1, 1, 3, 0,_PSET, 0 );
  240.     __symbol( _dsx2+ 96,_dsy2+ 24,P_DATA1[_num].Name, 1, 1, 5, 0,_PSET, 0 );
  241.     __symbol( _dsx2+ 80,_dsy2+ 56,val_to_moj( P_DATA1[_num].Money,ADD_work, 5 ), 1, 1, 5, 0,_PSET, 0 );
  242.     }
  243.  
  244.     get_window_xy(  9 );
  245.  
  246.     __symbol( _wsx+ 16,_wsy+  8,"キーナンバー", 1, 1, 5, 0,_PSET, 0 );
  247.     __symbol( _wsx+336,_wsy+  8,"キーナンバー", 1, 1, 5, 0,_PSET, 0 );
  248.  
  249.     get_window_xy( 10 );
  250.  
  251.     for ( _lp= 0;_lp<PLY_NUM- 1;_lp++ ) {
  252.  
  253.     _dsx1=_wsx+  8+160*_lp;
  254.     _dsy1=_wsy            ;
  255.  
  256.     ADD_Gcopy(   0,320, 48, 64,_dsx1+ 32,_dsy1+ 24 );
  257.  
  258.     __symbol( _dsx1+ 56,_dsy1+ 88,"まい", 1, 1, 3, 0,_PSET, 0 );
  259.     }
  260.  
  261.     get_window_xy( 11 );
  262.  
  263.     __symbol( _wsx+ 16,_wsy+  8,"なまえ:"            , 1, 1, 3, 0,_PSET, 0 );
  264.     __symbol( _wsx+ 16,_wsy+ 24,"持ち金:¥"          , 1, 1, 3, 0,_PSET, 0 );
  265.     __symbol( _wsx+ 16,_wsy+ 40,"戦 歴:  勝  敗", 1, 1, 3, 0,_PSET, 0 );
  266.     __symbol( _wsx+ 16,_wsy+ 56,"カード:    まい", 1, 1, 3, 0,_PSET, 0 );
  267. }
  268.  
  269. screen_04( int  _num1 )
  270. {
  271.     int  _dsx1,_dsy1,_num2;
  272.  
  273.     get_window_xy( 11 );
  274.  
  275.     _num2=P_DATA2[_num1].Player               ;
  276.     _dsx1= 48+192*( P_DATA1[_num2].Face %  3 );
  277.     _dsy1=256+ 64*( P_DATA1[_num2].Face /  3 );
  278.  
  279.     ADD_Gcopy( _dsx1,_dsy1, 64, 64,_wsx+192,_wsy+  8 );
  280.  
  281.     __line( _wsx+ 80,_wsy+  8, 95, 15,_PSET,14,_FULL,_BETA,14 );
  282.     __line( _wsx+ 96,_wsy+ 24, 79, 15,_PSET,14,_FULL,_BETA,14 );
  283.     __line( _wsx+ 80,_wsy+ 40, 31, 15,_PSET,14,_FULL,_BETA,14 );
  284.     __line( _wsx+128,_wsy+ 40, 31, 15,_PSET,14,_FULL,_BETA,14 );
  285.     __line( _wsx+ 80,_wsy+ 56, 63, 15,_PSET,14,_FULL,_BETA,14 );
  286.  
  287.     __symbol( _wsx+ 96,_wsy+  8,P_DATA1[_num2].Name, 1, 1, 5, 0,_PSET, 0 );
  288.     __symbol( _wsx+ 96,_wsy+ 24,val_to_moj( P_DATA1[_num2].Money   ,ADD_work, 5 ), 1, 1, 5, 0,_PSET, 0 );
  289.     __symbol( _wsx+ 80,_wsy+ 40,val_to_moj( P_DATA1[_num2].Win     ,ADD_work, 2 ), 1, 1, 5, 0,_PSET, 0 );
  290.     __symbol( _wsx+128,_wsy+ 40,val_to_moj( P_DATA1[_num2].Lose    ,ADD_work, 2 ), 1, 1, 5, 0,_PSET, 0 );
  291.     __symbol( _wsx+112,_wsy+ 56,val_to_moj( P_DATA2[_num1].Card_num,ADD_work, 2 ), 1, 1, 5, 0,_PSET, 0 );
  292. }
  293.  
  294. screen_05( int  _num )
  295. {
  296.     int  _dsx1,_dsy1,_dsx2,_card,_lp;
  297.  
  298.     get_window_xy( 12 );
  299.  
  300.     __line( _wsx+  8,_wsy+ 16,351, 63,_PSET,14,_FULL,_BETA,14 );
  301.  
  302.     for ( _lp= 1;_lp<=P_DATA2[_num].Card_num;_lp++ ) {
  303.  
  304.     _card=       P_DATA2[_num].Card[P_DATA2[_num].Card_num-_lp];              ;
  305.     _card=_card<52 ? _card : 52;
  306.  
  307.     if ( P_DATA1[P_DATA2[_num].Player].Play==PLAY_COM )
  308.  
  309.         _card=65;
  310.  
  311.     _dsx1=     ( _card % 13                 )* 48    ;
  312.     _dsy1=     ( _card / 13                 )* 64    ;
  313.     _dsx2=_wsx+( P_DATA2[_num].Card_num-_lp )* 16+  8;
  314.  
  315.     ADD_Gcopy( _dsx1,_dsy1, 48, 64,_dsx2,_wsy+ 16 );
  316.     }
  317.  
  318.     for ( _lp= 0;_lp<20;_lp++ )
  319.  
  320.     SEL_CARD[_lp]= 0;
  321. }
  322.  
  323. screen_06()
  324. {
  325.     int  _dsx1,_dsy1,_lp,_card;
  326.     int  _num=ADD_get_select_only();
  327.     int  _card_d[ 3][ 2] = { { 200,  0 },{ 160, 80 },{ 144, 56 } };
  328.  
  329.     get_window_xy(  9 );
  330.  
  331.     __line( _wsx+144,_wsy+  8,159, 63,_PSET,14,_FULL,_BETA,14 );
  332.  
  333.     _wsx+=_card_d[_num- 1][ 0];
  334.  
  335.     for ( _lp= 0;_lp<_num;_lp++ ) {
  336.  
  337.     _card=SEL_ONLY[_lp]<52 ? SEL_ONLY[_lp] : 52;
  338.     _dsx1=( _card % 13 )* 48                   ;
  339.     _dsy1=( _card / 13 )* 64                   ;
  340.  
  341.     ADD_Gcopy( _dsx1,_dsy1, 48, 64,_wsx,_wsy+  8 );
  342.  
  343.     _wsx+=_card_d[_num- 1][ 1];
  344.     }
  345. }
  346.  
  347. screen_07()
  348. {
  349.     int  _lp,_wei,_num;
  350.  
  351.     get_window_xy(  9 );
  352.  
  353.     MOUSE_OFF;
  354.  
  355.     for ( _lp= 0,_wei=10;_lp< 2;_lp++,_wei/=10 ) {
  356.  
  357.     _num=KEY_NUM==-1 ? 10 : ( KEY_NUM / _wei ) % 10;
  358.  
  359.     VRAM_Gput( _wsx+ 16+ 56*_lp,_wsy+ 32, 40, 40,NUM_work[_num] );
  360.     VRAM_Gput( _wsx+336+ 56*_lp,_wsy+ 32, 40, 40,NUM_work[_num] );
  361.     }
  362.  
  363.     MOUSE_ON ;
  364. }
  365.  
  366. screen_08()
  367. {
  368.     int  _lp,_count= 0,_num1=TARGET_P,_num2;
  369.  
  370.     get_window_xy( 10 );
  371.  
  372.     if ( WIN_FLAG== 0 ) {
  373.  
  374.     for ( _lp= 0;_lp<( LIFE_NUM- 1 );_lp++,_wsx+=160 ) {
  375.  
  376.         do {
  377.  
  378.         _num1=( _num1+ 1 ) % PLY_NUM;
  379.  
  380.         _count++;
  381.  
  382.         } while ( P_DATA2[_num1].Life!=COND_PLAY && _count<PLY_NUM );
  383.  
  384.         _num2=P_DATA2[_num1].Player;
  385.  
  386.         __line( _wsx+ 32,_wsy+  8, 63, 15,_PSET,14,_FULL,_BETA,14 );
  387.         __line( _wsx+ 32,_wsy+ 88, 31, 15,_PSET,14,_FULL,_BETA,14 );
  388.  
  389.         __symbol( _wsx+ 32,_wsy+  8,P_DATA1[_num2].Name, 1, 1, 5, 0,_PSET, 0 );
  390.         __symbol( _wsx+ 32,_wsy+ 88,val_to_moj( P_DATA2[_num1].Card_num,ADD_work, 2 ), 1, 1, 5, 0,_PSET, 0 );
  391.     }
  392.     }
  393. }
  394.  
  395. screen_09()
  396. {
  397.     int  _lp1,_lp2,_lp3,_lp4;
  398.  
  399.     for ( _lp1= 0;_lp1< 2;_lp1++ )
  400.  
  401.     for ( _lp2= 0;_lp2<40;_lp2+= 4 )
  402.  
  403.         for ( _lp3= 0;_lp3< 5;_lp3++ )
  404.  
  405.         for ( _lp4= 0;_lp4<16;_lp4+= 2 ) {
  406.  
  407.             __line(      40*_lp4, 40*( _lp1== 1 )+ 80*_lp3+_lp2, 39, 3,_PSET, 0,_FULL,_BETA, 0 );
  408.             __line(  40+ 40*_lp4, 40*( _lp1== 0 )+ 80*_lp3+_lp2, 39, 3,_PSET, 0,_FULL,_BETA, 0 );
  409.         }
  410.  
  411.     __back_color(  0 );
  412.  
  413.     window_close(  8 );
  414.     window_close(  9 );
  415.     window_close( 10 );
  416.     window_close( 11 );
  417.     window_close( 12 );
  418.  
  419.     screen_fade_out();
  420.  
  421.     __back_color( 14 );
  422.  
  423.     __gcls();
  424. }
  425.  
  426. screen_10()
  427. {
  428.     int  _lp= 0,_dsx1,_dsy1,_num;
  429.  
  430.     get_window_xy( 13 );
  431.  
  432.     for ( ;_lp<PLY_NUM;_lp++ ) {
  433.  
  434.     _num =P_DATA2[_lp].Player                ;
  435.     _dsx1= 48+192*( P_DATA1[_num].Face %  3 );
  436.     _dsy1=256+ 64*( P_DATA1[_num].Face /  3 );
  437.  
  438.     ADD_Gcopy( _dsx1,_dsy1, 64, 64,_wsx+ 40,_wsy+ 24 );
  439.  
  440.     __symbol( _wsx+232,_wsy+ 24,P_DATA1[_num].Name, 1, 1, 5, 0,_PSET, 0 );
  441.     __symbol( _wsx+256,_wsy+ 40,val_to_moj( P_DATA2[_lp ].Card_num,ADD_work, 2 ), 1, 1, 5, 0,_PSET, 0 );
  442.     __symbol( _wsx+264,_wsy+ 56,val_to_moj( P_DATA2[_lp ].Adjust  ,ADD_work, 4 ), 1, 1, 5, 0,_PSET, 0 );
  443.     __symbol( _wsx+248,_wsy+ 72,val_to_moj( P_DATA1[_num].Money   ,ADD_work, 5 ), 1, 1, 5, 0,_PSET, 0 );
  444.  
  445.     if ( P_DATA2[_lp  ].Card_num== 0 ) {
  446.  
  447.         __symbol( _wsx+  8,_wsy+ 32,"勝", 1, 1, 5, 0,_PSET, 0 );
  448.         __symbol( _wsx+  8,_wsy+ 64,"ち", 1, 1, 5, 0,_PSET, 0 );
  449.  
  450.         P_DATA1[_num].Win++;
  451.  
  452.     } else {
  453.  
  454.         __symbol( _wsx+  8,_wsy+ 32,"敗", 1, 1, 5, 0,_PSET, 0 );
  455.         __symbol( _wsx+  8,_wsy+ 64,"け", 1, 1, 5, 0,_PSET, 0 );
  456.         __symbol( _wsx+248,_wsy+ 56,"-", 1, 1, 5, 0,_PSET, 0 );
  457.  
  458.         P_DATA1[_num].Lose++;
  459.     }
  460.  
  461.     _wsy+= 80;
  462.     }
  463. }
  464.  
  465. /***************************************************************************
  466.             画面のFADE IN/OUT            
  467.  ***************************************************************************/
  468.  
  469. screen_fade_in()
  470. {
  471.     int  _lp1,_lp2;
  472.  
  473.     for ( _lp1= 0;_lp1<=FADE_SPEED;_lp1++ ) {
  474.  
  475.     for ( _lp2= 0;_lp2<16;_lp2++ )
  476.  
  477.         __palette( _lp2,( int )( PAL[_lp2][ 0]/FADE_SPEED.0*_lp1 ),
  478.                 ( int )( PAL[_lp2][ 1]/FADE_SPEED.0*_lp1 ),
  479.                 ( int )( PAL[_lp2][ 2]/FADE_SPEED.0*_lp1 ) );
  480.  
  481.     for ( _lp2= 0;_lp2<10000;_lp2++ );
  482.     }
  483. }
  484.  
  485. screen_fade_out()
  486. {
  487.     int  _lp1,_lp2;
  488.  
  489.     for ( _lp1=FADE_SPEED;_lp1>= 0;_lp1-- ) {
  490.  
  491.     for ( _lp2= 0;_lp2<16;_lp2++ )
  492.  
  493.         __palette( _lp2,( int )( PAL[_lp2][ 0]/FADE_SPEED.0*_lp1 ),
  494.                 ( int )( PAL[_lp2][ 1]/FADE_SPEED.0*_lp1 ),
  495.                 ( int )( PAL[_lp2][ 2]/FADE_SPEED.0*_lp1 ) );
  496.  
  497.     for ( _lp2= 0;_lp2<10000;_lp2++ );
  498.     }
  499. }
  500.  
  501. /***************************************************************************
  502.          マウスで押されたウィンドウ番号による分岐         
  503.  ***************************************************************************/
  504.  
  505. window_sub()
  506. {
  507.     switch ( _push.st_wind ) {
  508.  
  509.     case  1 :  push_top_menu();                        break;
  510.     case  2 :  push_player_sub();                      break;
  511.     case  3 :  push_face_select();                     break;
  512.     case  4 :  push_key_board();                       break;
  513.     case  6 :  push_exit_button();                     break;
  514.     case  7 :  push_check_01();                        break;
  515.     case 10 :  ADD_other_player();                     break;
  516.     case 12 :  ADD_card_select();                      break;
  517.     case 14 :  ADD_end_menu();                         break;
  518.     }
  519. }
  520.  
  521. /***************************************************************************
  522.                 トップメニュー               
  523.  ***************************************************************************/
  524.  
  525. push_top_menu()
  526. {
  527.     switch ( _push.st_but ) {
  528.  
  529.     case  1 :  push_game_start();                      break;
  530.     case  2 :  END_FLAG= 1;                            break;
  531.     }
  532. }
  533.  
  534. /***************************************************************************
  535.                 エンドメニュー               
  536.  ***************************************************************************/
  537.  
  538. ADD_end_menu()
  539. {
  540.     screen_fade_out();
  541.  
  542.     window_close( 13 );
  543.     window_close( 14 );
  544.  
  545.     switch ( _push.st_but ) {
  546.  
  547.     case  1 :  ADD_main();                                 break;
  548.  
  549.     case  2 :  window_open(  1 );
  550.            screen_fade_in();                           break;
  551.     }
  552. }
  553.  
  554. /***************************************************************************
  555.                 キャラクタ登録               
  556.  ***************************************************************************/
  557.  
  558. push_game_start()
  559. {
  560.     int  _lp;
  561.  
  562.     screen_fade_out();
  563.  
  564.     window_close(  1 );
  565.  
  566.     box_frame(   8,  8,623,383,_OFF );
  567.     box_frame( 224, 12,191, 23,_ON  );
  568.  
  569.     __symbol( 232, 16,"彡 キャラクタ登録 彡", 1, 1, 5, 0,_PSET, 0 );
  570.  
  571.     window_open(  2 );
  572.     window_open(  6 );
  573.  
  574.     for ( _lp= 0;_lp< 4;_lp++ )
  575.  
  576.     screen_01( _lp );
  577.  
  578.     screen_fade_in();
  579. }
  580.  
  581. push_player_sub()
  582. {
  583.     get_window_xy(  2 );
  584.  
  585.     _wsx+= 19;
  586.     _wsy+= 11;
  587.  
  588.     __line( _wsx+304*( TARGET_P % 2 ),_wsy+120*( TARGET_P / 2 ), 73,  5,_PSET,14,_FULL,_BETA,14 );
  589.  
  590.     TARGET_P=( _push.st_but- 1 )/11;
  591.  
  592.     __line( _wsx+304*( TARGET_P % 2 ),_wsy+120*( TARGET_P / 2 ), 73,  5,_PSET, 4,_FULL,_BETA, 5 );
  593.  
  594.     switch ( ( _push.st_but- 1 ) % 11 ) {
  595.  
  596.     case  1 :  window_close(  4 );
  597.            window_close(  5 );
  598.            window_open(  3 );                      break;
  599.  
  600.     case  2 :  window_close(  3 );
  601.            window_open(  4 );
  602.            window_open(  5 );
  603.  
  604.            DUM_NAME[ 0]='\0';
  605.            NAME_LNG= 0;
  606.  
  607.            screen_02();                            break;
  608.  
  609.     case  5 :  P_DATA1[TARGET_P].Play=( P_DATA1[TARGET_P].Play+ 1 ) % 3;
  610.  
  611.            screen_01( TARGET_P );                  break;
  612.     }
  613. }
  614.  
  615. push_face_select()
  616. {
  617.     window_close(  3 );
  618.  
  619.     P_DATA1[TARGET_P].Face=_push.st_but- 1;
  620.  
  621.     screen_01( TARGET_P );
  622. }
  623.  
  624. push_key_board()
  625. {
  626.     switch ( _push.st_but ) {
  627.  
  628.     case 59 :  if ( NAME_LNG> 0 ) {
  629.  
  630.                NAME_LNG          -= 2  ;
  631.                DUM_NAME[NAME_LNG] ='\0';
  632.  
  633.                screen_02();
  634.            }                                       break;
  635.  
  636.     case 60 :  if ( NAME_LNG> 0 ) {
  637.  
  638.                strcpy( P_DATA1[TARGET_P].Name,DUM_NAME );
  639.  
  640.                window_close(  4 );
  641.                window_close(  5 );
  642.  
  643.                screen_01( TARGET_P );
  644.            }                                       break;
  645.  
  646.     default :  if ( NAME_LNG< 8 ) {
  647.  
  648.                NAME_LNG+= 2;
  649.  
  650.                strncat( DUM_NAME,KEY_BOARD+ 2*( _push.st_but- 1 ), 2 );
  651.  
  652.                screen_02();
  653.            }
  654.     }
  655. }
  656.  
  657. push_exit_button()
  658. {
  659.     window_close(  3 );
  660.     window_close(  4 );
  661.     window_close(  5 );
  662.     window_open(  7 );
  663.  
  664.     window_control( _T_ALL, 7,_STOP );
  665. }
  666.  
  667. push_check_01()
  668. {
  669.     int  _lp;
  670.  
  671.     window_close(  7 );
  672.  
  673.     window_control( _T_ALL, 0,_ON );
  674.  
  675.     if ( _push.st_but== 1 ) {
  676.  
  677.     PLY_NUM= 0;
  678.  
  679.     for ( _lp= 0;_lp< 4;_lp++ )
  680.  
  681.         if ( P_DATA1[_lp].Play!=PLAY_REST )
  682.  
  683.         P_DATA2[PLY_NUM++].Player=_lp;
  684.  
  685.     if ( PLY_NUM>= 2 ) {
  686.  
  687.         screen_fade_out();
  688.  
  689.         window_close(  2 );
  690.         window_close(  6 );
  691.  
  692.         box_frame(   0,  0,639,399,_OFF );
  693.  
  694.         ADD_main();
  695.  
  696.     }
  697.     }
  698. }
  699.  
  700. /***************************************************************************
  701.               ADDゲームメイン部分             
  702.  ***************************************************************************/
  703.  
  704. ADD_Gcopy( int  _sx1,int  _sy1,int  _wx,int  _wy,int  _sx2,int  _sy2 )
  705. {
  706.     MOUSE_OFF;
  707.  
  708.     __screen(  1, 0 );
  709.  
  710.     VRAM_Gget( _sx1,_sy1,_wx,_wy,ADD_work );
  711.  
  712.     __screen(  0, 0 );
  713.  
  714.     VRAM_Gput( _sx2,_sy2,_wx,_wy,ADD_work );
  715.  
  716.     MOUSE_ON ;
  717. }
  718.  
  719. ADD_main()
  720. {
  721.     ADD_init();
  722.  
  723.     screen_fade_in();
  724.  
  725.     while ( WIN_FLAG== 0 && POUR_FLAG== 0 ) {
  726.  
  727.     ADD_FLAG= 0;
  728.  
  729.     if ( LUC_NUM== 0 )
  730.  
  731.         ADD_move_next_player();
  732.  
  733.     if ( P_DATA1[P_DATA2[TARGET_P].Player].Play==PLAY_COM )
  734.  
  735.         ADD_COM_brain( TARGET_P );
  736.  
  737.     else
  738.  
  739.         while ( ADD_FLAG== 0 )
  740.  
  741.         if ( button_wait(  0 )== 0 )     window_sub();
  742.     }
  743.  
  744.     if ( POUR_FLAG!= 0 ) {
  745.  
  746.     PUT_message( 19 );
  747.     PUT_message( 20 );
  748.  
  749.     screen_09();
  750.  
  751.     } else {
  752.  
  753.     screen_09();
  754.  
  755.     window_open( 13 );
  756.  
  757.     ADD_adjustment();
  758.  
  759.     screen_10();
  760.     }
  761.  
  762.     window_open( 14 );
  763.  
  764.     screen_fade_in();
  765. }
  766.  
  767. ADD_init()
  768. {
  769.     int  _lp;
  770.  
  771.     srand( ( unsigned )clock() );
  772.  
  773.     window_open(  8 );
  774.     window_open(  9 );
  775.     window_open( 10 );
  776.     window_open( 11 );
  777.     window_open( 12 );
  778.  
  779.     window_control( _T_ALL,12,_STOP );
  780.  
  781.     TARGET_P =rand() % PLY_NUM;
  782.     M_CARD   =CARD_ALL;
  783.     KEY_NUM  =-1;
  784.     LIFE_NUM =PLY_NUM;
  785.     PASS_NUM =LIFE_NUM;
  786.     LUC_NUM  = 0;
  787.     POUR_FLAG= 0;
  788.     WIN_FLAG = 0;
  789.  
  790.     for  ( _lp= 0;_lp<PLY_NUM;_lp++ )
  791.  
  792.     P_DATA2[_lp].Life=COND_PLAY;
  793.  
  794.     MOUSE_OFF;
  795.  
  796.     Gput_DISK_to_VRAM( "MESS_BOX.CG",280,224 );
  797.     Gput_DISK_to_VRAM( "ADD_LOGO.CG",472, 16 );
  798.  
  799.     MOUSE_ON ;
  800.  
  801.     ADD_deal_card();
  802.  
  803.     screen_03();
  804.     screen_07();
  805. }
  806.  
  807. ADD_adjustment()
  808. {
  809.     int  _lp1= 0,_lp2,_dum= 0,_num;
  810.  
  811.     for ( ;_lp1<PLY_NUM;_lp1++ )
  812.  
  813.     for ( _lp2= 0,P_DATA2[_lp1].Adjust= 0;_lp2<P_DATA2[_lp1].Card_num;_lp2++ ) {
  814.  
  815.         P_DATA2[_lp1].Adjust+=( P_DATA2[_lp1].Card[_lp2]<52 ? 50 : 200 );
  816.         _dum                +=( P_DATA2[_lp1].Card[_lp2]<52 ? 50 : 200 );
  817.     }
  818.  
  819.     for ( _lp1= 0;_lp1<PLY_NUM;_lp1++ ) {
  820.  
  821.     _num=P_DATA2[_lp1].Player;
  822.  
  823.     if ( P_DATA2[_lp1].Card_num== 0 )
  824.  
  825.         P_DATA1[_num].Money+=( P_DATA2[_lp1].Adjust=_dum );
  826.  
  827.     else
  828.  
  829.         P_DATA1[_num].Money-=P_DATA2[_lp1].Adjust;
  830.     }
  831. }
  832.  
  833. ADD_deal_card()
  834. {
  835.     int  _lp1,_lp2,_card;
  836.  
  837.     for ( _lp1= 0;_lp1<CARD_ALL;_lp1++ )
  838.  
  839.     CHK_CARD[_lp1]= 0;
  840.  
  841.     for ( _lp1= 0;_lp1<PLY_NUM;_lp1++ ) {
  842.  
  843.     P_DATA2[_lp1].Card_num= 0;
  844.  
  845.     ADD_get_mountain_card( _lp1,10 );
  846.     }
  847. }
  848.  
  849. ADD_arrange_card( int  _pl )
  850. {
  851.     int  _chk= 0,_cd1,_cd2,_cn1,_cn2,_lp;
  852.  
  853.     while ( _chk!=( P_DATA2[_pl].Card_num- 1 ) ) {
  854.  
  855.     _cd1=P_DATA2[_pl].Card[_chk   ];
  856.     _cd2=P_DATA2[_pl].Card[_chk+ 1];
  857.     _cn1=_cd1 % 13                 ;
  858.     _cn2=_cd2 % 13                 ;
  859.  
  860.     if ( _cd2< 52 && ( _cn1>_cn2 || ( _cn1==_cn2 && _cd1>_cd2 ) )   ||
  861.          _cd1>=52 && ( _cd2<  52 || ( _cd1> _cd2              ) ) )    {
  862.  
  863.         P_DATA2[_pl].Card[_chk   ]=_cd2;
  864.         P_DATA2[_pl].Card[_chk+ 1]=_cd1;
  865.  
  866.         _chk-=( _chk== 0 ?  1 :  2 );
  867.     }
  868.     _chk++;
  869.     }
  870. }
  871.  
  872. ADD_other_player()
  873. {
  874.     int  _lp= 0,_num=TARGET_P;
  875.  
  876.     if ( _push.st_but<LIFE_NUM ) {
  877.  
  878.     for ( ;_lp<_push.st_but;_lp++ )
  879.  
  880.         do     _num=( _num+ 1 ) % PLY_NUM;
  881.  
  882.         while ( P_DATA2[_num].Life==-1 );
  883.  
  884.     if ( LUC_NUM== 1 )     ADD_shower_handle( _num );
  885.     else                   ADD_change_handle( _num );
  886.  
  887.     LUC_NUM = 0;
  888.     ADD_FLAG= 1;
  889.  
  890.     window_control( _T_ALL, 0,_ON   );
  891.     window_control( _T_ALL,12,_STOP );
  892.     }
  893. }
  894.  
  895. ADD_shower_handle( int  _num )
  896. {
  897.     PUT_message( 17,_num, 0 );
  898.  
  899.     ADD_get_mountain_card( _num, 3 );
  900. }
  901.  
  902. ADD_change_handle( int  _num )
  903. {
  904.     int  _lp= 0,_dum;
  905.  
  906.     PUT_message( 15,TARGET_P,_num );
  907.  
  908.     _dum                      =P_DATA2[TARGET_P].Card_num;
  909.     P_DATA2[TARGET_P].Card_num=P_DATA2[_num].Card_num;
  910.     P_DATA2[_num].Card_num   =_dum;
  911.  
  912.     for ( ;_lp<20;_lp++ ) {
  913.  
  914.     _dum                       =P_DATA2[TARGET_P].Card[_lp];
  915.     P_DATA2[TARGET_P].Card[_lp]=P_DATA2[_num].Card[_lp];
  916.     P_DATA2[_num].Card[_lp]    =_dum;
  917.     }
  918. }
  919.  
  920. ADD_card_select()
  921. {
  922.     int  _cx=       _mos.st_x>= 48 ? ( _mos.st_x-_wsx- 8 )/16- 2 :  0  ;
  923.     int  _sx=_wsx+( _cx      !=  0 ? _cx* 16+ 40                 :  8 );
  924.     int  _wx=       _cx      !=  0 ?          15                 : 47  ;
  925.     int  _num,_but_mem                                                 ;
  926.  
  927.     switch ( _but_mem=_push.st_but ) {
  928.  
  929.     case  1 :  if ( P_DATA2[TARGET_P].Card_num>_cx ) {
  930.  
  931.                __line( _sx,_wsy+ 16,_wx, 63,_XOR, 4,_FULL,_BETA, 4 );
  932.  
  933.                SEL_CARD[_cx]= 1-SEL_CARD[_cx];
  934.            }
  935.  
  936.           break;
  937.  
  938.     case  2 :  ADD_pass_handle();
  939.  
  940.           break;
  941.  
  942.     case  3 :  switch ( ADD_select_check( &_num ) ) {
  943.  
  944.                case  0 :  LUC_NUM= 0;
  945.                   KEY_NUM=_num;
  946.  
  947.                   ADD_put_card();
  948.  
  949.                   screen_07();
  950.  
  951.                  break;
  952.  
  953.                case  1 :  LUC_NUM=_num;
  954.  
  955.                   ADD_put_card();
  956.  
  957.                   if ( WIN_FLAG== 0 ) {
  958.  
  959.                       PUT_message(  5+LUC_NUM, 0, 0 );
  960.  
  961.                       ADD_luckey_handle();
  962.                   }
  963.  
  964.                  break;
  965.            }
  966.  
  967.           break;
  968.     }
  969. }
  970.  
  971. ADD_select_check( int  *_ret )
  972. {
  973.     if ( ADD_the_number_of_card()> 3 )
  974.  
  975.     return( -1 );
  976.  
  977.     else
  978.  
  979.     if ( ADD_get_select_only()== 0 )
  980.  
  981.         return ( -1 );
  982.  
  983.     else
  984.  
  985.         if ( ( *_ret=ADD_luckey_check() )!=-1 )
  986.  
  987.         return (  1 );
  988.  
  989.         else
  990.  
  991.         if ( KEY_NUM==-1 && ADD_get_select_only()> 1 )
  992.  
  993.             return ( -1 );
  994.  
  995.         else
  996.  
  997.             if ( ( *_ret=ADD_number_check() )!=-1 )
  998.  
  999.             return (  0 );
  1000.  
  1001.             else
  1002.  
  1003.             return( -2 );
  1004. }
  1005.  
  1006. ADD_luckey_check()
  1007. {
  1008.     int  _num=ADD_get_select_only(),_lp,_count= 0,_chk= 0;
  1009.  
  1010.     if (   _num== 3 && SEL_ONLY[ 2]<52 &&
  1011.      ( SEL_ONLY[ 0] % 13 )==( SEL_ONLY[ 1] % 13 ) &&
  1012.      ( SEL_ONLY[ 0] % 13 )==( SEL_ONLY[ 2] % 13 )    )
  1013.  
  1014.     return (  1 );
  1015.  
  1016.     for ( ;_num> 0;_num-- ) {
  1017.  
  1018.     _count+=( SEL_ONLY[_num- 1]>=52 );
  1019.  
  1020.     _chk  -=( SEL_ONLY[_num- 1]< 52 );
  1021.     }
  1022.  
  1023.     if ( _chk< 0 || _count== 0 )
  1024.  
  1025.     return ( -1 );
  1026.  
  1027.     else
  1028.  
  1029.     return ( _count );
  1030. }
  1031.  
  1032. ADD_number_check()
  1033. {
  1034.     int  _num=ADD_get_select_only(),_ret= 0,_sum= 0;
  1035.  
  1036.     for ( ;_num> 0;_num-- ) {
  1037.  
  1038.     _sum+=( SEL_ONLY[_num- 1] % 13 )+ 1;
  1039.  
  1040.     _ret-=( SEL_ONLY[_num- 1]>=52 );
  1041.     }
  1042.  
  1043.     _sum%=10;
  1044.  
  1045.     if ( _ret< 0 )
  1046.  
  1047.     return ( -1 );
  1048.  
  1049.     else
  1050.  
  1051.     if ( KEY_NUM==_sum || KEY_NUM==-1 )
  1052.  
  1053.         return ( _sum );
  1054.  
  1055.     else
  1056.  
  1057.         return ( -1 );
  1058. }
  1059.  
  1060. ADD_get_select_only()
  1061. {
  1062.     int  _lp,_count= 0;
  1063.  
  1064.     SEL_ONLY[ 0]=SEL_ONLY[ 1]=SEL_ONLY[ 2]= 0;
  1065.  
  1066.     for ( _lp= 0;_lp<20;_lp++ )
  1067.  
  1068.     if ( SEL_CARD[_lp] )
  1069.  
  1070.         SEL_ONLY[_count++]=P_DATA2[TARGET_P].Card[_lp];
  1071.  
  1072.     return ( _count );
  1073. }
  1074.  
  1075. ADD_the_number_of_card()
  1076. {
  1077.     int  _lp,_ret= 0;
  1078.  
  1079.     for ( _lp= 0;_lp<20;_lp++ )
  1080.  
  1081.     if ( SEL_CARD[_lp]== 1 )     _ret++;
  1082.  
  1083.     return ( _ret );
  1084. }
  1085.  
  1086. ADD_put_card()
  1087. {
  1088.     int  _num=ADD_get_select_only(),_lp1= 0,_lp2,_count= 0;
  1089.  
  1090.     screen_06();
  1091.  
  1092.     PUT_message( LUC_NUM== 0 ?  5 : 16, 0, 0 );
  1093.  
  1094.     for ( _lp2= 0;_lp2<CARD_ALL;_lp2++ )
  1095.  
  1096.     if ( CHK_CARD[_lp2]== 3 )
  1097.  
  1098.         CHK_CARD[_lp2]= 2;
  1099.  
  1100.     while ( _num!=_count ) {
  1101.  
  1102.     CHK_CARD[SEL_ONLY[_count]]= 3;
  1103.  
  1104.     while ( P_DATA2[TARGET_P].Card[_lp1]!=SEL_ONLY[_count] )
  1105.  
  1106.         _lp1++;
  1107.  
  1108.     for ( _lp2=_lp1;_lp2<19;_lp2++ )
  1109.  
  1110.         P_DATA2[TARGET_P].Card[_lp2]=P_DATA2[TARGET_P].Card[_lp2+ 1];
  1111.  
  1112.     _count++;
  1113.     }
  1114.  
  1115.     if ( ( P_DATA2[TARGET_P].Card_num-=_num )== 0 ) {
  1116.  
  1117.     WIN_FLAG= 1;
  1118.  
  1119.     PUT_message( 11, 0, 0 );
  1120.     }
  1121.  
  1122.     PASS_NUM =LIFE_NUM;
  1123.     ADD_FLAG = 1;
  1124. }
  1125.  
  1126. ADD_pass_handle()
  1127. {
  1128.     PUT_message(  9, 0, 0 );
  1129.  
  1130.     ADD_get_mountain_card( TARGET_P, 1 );
  1131.  
  1132.     ADD_FLAG= 1;
  1133.  
  1134.     if ( --PASS_NUM== 1 )
  1135.  
  1136.     ADD_pour_key();
  1137. }
  1138.  
  1139. ADD_luckey_handle()
  1140. {
  1141.     if ( LUC_NUM!= 2 ) {
  1142.  
  1143.     window_control( _T_ALL, 0,_ON   );
  1144.     window_control( _T_ALL,10,_STOP );
  1145.  
  1146.     PUT_message( 11+LUC_NUM, 0, 0 );
  1147.  
  1148.     } else {
  1149.  
  1150.     ADD_pour_key();
  1151.  
  1152.     TARGET_P-= 1;
  1153.  
  1154.     LUC_NUM= 0;
  1155.     }
  1156. }
  1157.  
  1158. ADD_move_next_player()
  1159. {
  1160.     int  _count= 0;
  1161.  
  1162.     if ( WIN_FLAG== 0 ) {
  1163.  
  1164.     do {
  1165.  
  1166.         TARGET_P=( TARGET_P+ 1 ) % PLY_NUM;
  1167.  
  1168.         _count++;
  1169.  
  1170.     } while ( P_DATA2[TARGET_P].Life!=COND_PLAY && _count<PLY_NUM );
  1171.  
  1172.     screen_04( TARGET_P );
  1173.     screen_05( TARGET_P );
  1174.     }
  1175.  
  1176.     screen_08();
  1177.  
  1178.     PUT_message( P_DATA1[P_DATA2[TARGET_P].Player].Play==PLAY_COM ?  3 : 18,TARGET_P, 0 );
  1179. }
  1180.  
  1181. ADD_get_mountain_card( int  _pl,int  _num )
  1182. {
  1183.     int  _lp,_card;
  1184.  
  1185.     if( P_DATA2[_pl].Card_num>20-_num )
  1186.  
  1187.     ADD_flat_player( _pl );
  1188.  
  1189.     else
  1190.  
  1191.     for ( _lp= 0;_lp<_num;_lp++ ) {
  1192.  
  1193.         if ( M_CARD== 0 )
  1194.  
  1195.         if ( ADD_make_mountain_card()== 0 )
  1196.  
  1197.             POUR_FLAG= 1;
  1198.  
  1199.         if ( POUR_FLAG== 0 ) {
  1200.  
  1201.         do   _card=rand() % CARD_ALL;
  1202.  
  1203.         while ( CHK_CARD[_card]!= 0 );
  1204.  
  1205.         M_CARD--;
  1206.         CHK_CARD[_card]++;
  1207.  
  1208.         P_DATA2[_pl].Card[P_DATA2[_pl].Card_num++]=_card;
  1209.         }
  1210.     }
  1211.  
  1212.     ADD_arrange_card( _pl );
  1213. }
  1214.  
  1215. ADD_flat_player( int  _pl )
  1216. {
  1217.     int  _lp;
  1218.  
  1219.     WIN_FLAG+=( --LIFE_NUM== 1 );
  1220.  
  1221.     for ( _lp= 0;_lp<P_DATA2[_pl].Card_num;_lp++ )
  1222.  
  1223.     CHK_CARD[P_DATA2[_pl].Card[_lp]]= 2;
  1224.  
  1225.     P_DATA2[_pl].Life=COND_FLAT;
  1226.  
  1227.     get_window_xy(  8 );
  1228.  
  1229.     for ( _lp= 1;_lp<79;_lp++ )
  1230.  
  1231.     __line( _wsx+  1,_wsy+ 80*_pl+ 65+_lp,165,  0,_PSET, 0,_LIN, 0,0x5555 << ( _lp % 2 ) );
  1232.  
  1233.     get_window_xy( 10 );
  1234.  
  1235.     __line( _wsx-159+160*LIFE_NUM,_wsy+  1,125,109,_PSET,14,_FULL,_BETA,14 );
  1236.  
  1237.     for ( _lp= 1;_lp<111;_lp++ )
  1238.  
  1239.     __line( _wsx-159+160*LIFE_NUM,_wsy+  1+_lp,125,  0,_PSET, 0,_LIN, 0,0x5555 << ( _lp % 2 ) );
  1240. }
  1241.  
  1242. ADD_make_mountain_card()
  1243. {
  1244.     int  _lp,_ret= 0;
  1245.  
  1246.     for ( _lp= 0;_lp<CARD_ALL;_lp++ )
  1247.  
  1248.     if ( CHK_CARD[_lp]== 2 ) {
  1249.  
  1250.         _ret++;
  1251.  
  1252.         M_CARD++;
  1253.  
  1254.         CHK_CARD[_lp]= 0;
  1255.     }
  1256.  
  1257.     return ( _ret );
  1258. }
  1259.  
  1260. ADD_pour_key()
  1261. {
  1262.     KEY_NUM =-1;
  1263.     PASS_NUM=LIFE_NUM;
  1264.  
  1265.     PUT_message( 10, 0, 0 );
  1266.  
  1267.     get_window_xy(  9 );
  1268.  
  1269.     __line( _wsx+144,_wsy+  8,159, 63,_PSET,14,_FULL,_BETA,14 );
  1270.  
  1271.     screen_07();
  1272. }
  1273.  
  1274. /***************************************************************************
  1275.              コンピュータの脳ミソ部分             
  1276.  ***************************************************************************/
  1277.  
  1278. ADD_COM_brain( int  _pl )
  1279. {
  1280.     int  _lp,_num1,_num2,_num3;
  1281.  
  1282.     PUT_message(  4, 0, 0 );
  1283.  
  1284.     for ( _lp= 0;_lp<660;_lp++ )
  1285.  
  1286.     ADD_work[_lp]= 0;
  1287.  
  1288.     ADD_COM_card_cnv( _pl );
  1289.  
  1290.  
  1291.     /********************************************************************
  1292.                  Select check level 1
  1293.      ********************************************************************/
  1294.  
  1295.     if ( KEY_NUM==-1 ) {
  1296.  
  1297.     if ( ADD_COM_num_percent( _pl )== 0 )
  1298.  
  1299.         ADD_work[300]=P_DATA2[_pl].Card[ 0];
  1300.  
  1301.     else {
  1302.  
  1303.         for ( _lp= 0,_num1= 0;_lp<10;_lp++ )
  1304.  
  1305.         _num1=ADD_work[_num1]<ADD_work[_lp] ? _lp : _num1;
  1306.  
  1307.         ADD_work[300]=_num1+ 1;
  1308.     }
  1309.     ADD_work[301]=  0     ;
  1310.     ADD_work[302]=  0     ;
  1311.  
  1312.     ADD_COM_put_card( _pl, 1 );
  1313.  
  1314.     return;
  1315.     }
  1316.  
  1317.  
  1318.     /********************************************************************
  1319.                  Select check level 2
  1320.      ********************************************************************/
  1321.  
  1322.     if ( ( _num1=ADD_COM_get_top_num( &_num2 ) )< 6 )
  1323.  
  1324.     if ( ( rand() % 100 )<13*( 6-_num1 ) && ADD_work[10]>= 1 ) {
  1325.  
  1326.         ADD_COM_luckey_make( LUC_NUM= 1 );
  1327.  
  1328.         return;
  1329.     }
  1330.  
  1331.  
  1332.     /********************************************************************
  1333.                  Select check level 3
  1334.      ********************************************************************/
  1335.  
  1336.     if (     ADD_COM_num_percent( _pl )>=70 &&
  1337.      ( ( ADD_COM_get_top_num( &_num1 )* 2 )<=P_DATA2[_pl].Card_num ||
  1338.          ADD_COM_get_top_num( &_num1 )< 4                             ) )
  1339.  
  1340.     if ( ADD_work[10]>= 3 && ( rand() % 100 )<70 ) {
  1341.  
  1342.         ADD_COM_luckey_make( LUC_NUM= 3 );
  1343.  
  1344.         return;
  1345.  
  1346.     } else if ( ADD_work[10]>= 1 && ( rand() % 100 )<35 ) {
  1347.  
  1348.         ADD_COM_luckey_make( LUC_NUM= 1 );
  1349.  
  1350.         return;
  1351.     }
  1352.  
  1353.  
  1354.     /********************************************************************
  1355.                  Select check level 4
  1356.      ********************************************************************/
  1357.  
  1358.     ADD_COM_pick_up_pear( KEY_NUM, 1,&_num1,&_num2 );
  1359.  
  1360.     if ( ( _num3=ADD_COM_key_check_01( KEY_NUM, 3,_num1 ) )!= 0 ) {
  1361.  
  1362.     ADD_COM_put_card( _pl,_num3 );
  1363.  
  1364.     return;
  1365.     }
  1366.  
  1367.  
  1368.     /********************************************************************
  1369.                  Select check level 5
  1370.      ********************************************************************/
  1371.  
  1372.     ADD_COM_pick_up_pear( KEY_NUM, 2,&_num1,&_num2 );
  1373.  
  1374.     if ( ( _num3=ADD_COM_key_check_02( KEY_NUM,_num1,_num2 ) )!= 0 ) {
  1375.  
  1376.     ADD_COM_put_card( _pl,_num3 );
  1377.  
  1378.     return;
  1379.     }
  1380.  
  1381.  
  1382.     /********************************************************************
  1383.                  Select check level 6
  1384.      ********************************************************************/
  1385.  
  1386.     ADD_COM_pick_up_pear( KEY_NUM, 1,&_num1,&_num2 );
  1387.  
  1388.     if ( ( _num3=ADD_COM_key_check_01( KEY_NUM, 2,_num1 ) )!= 0 ) {
  1389.  
  1390.     ADD_COM_put_card( _pl,_num3 );
  1391.  
  1392.     return;
  1393.     }
  1394.  
  1395.  
  1396.     /********************************************************************
  1397.                  Select check level 7
  1398.      ********************************************************************/
  1399.  
  1400.     if ( ( _num3=ADD_COM_pick_up_pear( KEY_NUM, 2,&_num1,&_num2 ) )!= 0 ) {
  1401.  
  1402.     ADD_COM_put_card( _pl,_num3 );
  1403.  
  1404.     return;
  1405.     }
  1406.  
  1407.  
  1408.     /********************************************************************
  1409.                  Select check level 8
  1410.      ********************************************************************/
  1411.  
  1412.     if ( ( _num3=ADD_COM_pick_up_pear( KEY_NUM, 1,&_num1,&_num2 ) )!= 0 ) {
  1413.  
  1414.     ADD_COM_put_card( _pl,_num3 );
  1415.  
  1416.     return;
  1417.     }
  1418.  
  1419.  
  1420.     /********************************************************************
  1421.                  Select check level 9
  1422.      ********************************************************************/
  1423.  
  1424.     if ( ( rand() % 100 )<85 && ADD_work[10]>= 2 ) {
  1425.  
  1426.     ADD_COM_luckey_make( LUC_NUM= 2 );
  1427.  
  1428.     return;
  1429.     }
  1430.  
  1431.     ADD_pass_handle();
  1432. }
  1433.  
  1434. ADD_COM_get_top_num( int  *_pl )
  1435. {
  1436.     int  _lp1,_num=100;
  1437.  
  1438.     for ( _lp1= 0;_lp1<PLY_NUM;_lp1++ )
  1439.  
  1440.     if ( _lp1!=TARGET_P && P_DATA2[_lp1].Card_num<_num )
  1441.  
  1442.         _num=P_DATA2[( *_pl=_lp1 )].Card_num;
  1443.  
  1444.     return ( _num );
  1445. }
  1446.  
  1447. ADD_COM_num_percent( int  _pl )
  1448. {
  1449.     int  _c_all=P_DATA2[_pl].Card_num;
  1450.     int  _c_num=_c_all-ADD_work[10];
  1451.  
  1452.     return ( ( int )( ( double )_c_num / _c_all*100.0 ) );
  1453. }
  1454.  
  1455. ADD_COM_luckey_make( int  _num )
  1456. {
  1457.     int  _lp;
  1458.  
  1459.     for ( _lp= 0;_lp<_num;_lp++ )
  1460.  
  1461.     ADD_work[300+_lp]=P_DATA2[TARGET_P].Card[P_DATA2[TARGET_P].Card_num-_lp- 1];
  1462.  
  1463.     ADD_COM_put_card( TARGET_P, 1 );
  1464. }
  1465.  
  1466. ADD_COM_put_card( int  _pl,int  _num1 )
  1467. {
  1468.     int  _lp1,_lp2,_num2=( rand() % _num1 )* 3,_flag1,_key= 0;
  1469.  
  1470.     for ( _lp1= 0;_lp1< 3;_lp1++ ) {
  1471.  
  1472.     _lp2   =_flag1= 0;
  1473.     _key  +=ADD_work[300+_num2+_lp1];
  1474.  
  1475.     while ( _lp2<P_DATA2[_pl].Card_num && _flag1== 0 ) {
  1476.  
  1477.         if (   SEL_CARD[_lp2]== 0 &&
  1478.          ( P_DATA2[_pl].Card[_lp2]< 52 && ( ( P_DATA2[_pl].Card[_lp2] % 13 ) % 10 )==( ADD_work[300+_num2+_lp1]- 1 ) ) ||
  1479.          ( P_DATA2[_pl].Card[_lp2]>=52 &&     P_DATA2[_pl].Card[_lp2]              ==  ADD_work[300+_num2+_lp1]      )    )
  1480.  
  1481.         SEL_CARD[_lp2]=_flag1= 1;
  1482.  
  1483.         _lp2++;
  1484.     }
  1485.     }
  1486.  
  1487.     if ( LUC_NUM== 0 && ADD_get_select_only()== 3 )
  1488.  
  1489.     if ( ( ( SEL_ONLY[ 0] % 13 )==( SEL_ONLY[ 1] % 13 ) ) &&
  1490.          ( ( SEL_ONLY[ 0] % 13 )==( SEL_ONLY[ 2] % 13 ) )    )
  1491.  
  1492.         LUC_NUM= 1;
  1493.  
  1494.     ADD_put_card();
  1495.  
  1496.     if ( LUC_NUM== 0 )
  1497.  
  1498.     KEY_NUM=_key % 10;
  1499.  
  1500.     else {
  1501.  
  1502.     if ( WIN_FLAG== 0 ) {
  1503.  
  1504.         PUT_message(  5+LUC_NUM, 0, 0 );
  1505.  
  1506.         ADD_COM_get_top_num( &_num2 );
  1507.  
  1508.         switch ( LUC_NUM ) {
  1509.  
  1510.         case  1 :  ADD_shower_handle( _num2 );
  1511.  
  1512.               break;
  1513.  
  1514.         case  2 :  ADD_pour_key();
  1515.  
  1516.                TARGET_P-= 1;
  1517.  
  1518.               break;
  1519.  
  1520.         case  3 :  ADD_change_handle( _num2 );
  1521.  
  1522.               break;
  1523.         }
  1524.     }
  1525.     LUC_NUM = 0;
  1526.     ADD_FLAG= 1;
  1527.     }
  1528.  
  1529.     screen_07();
  1530. }
  1531.  
  1532. /***************************************************************************
  1533.      下1桁各数のカード枚数収得(ADD_work[  0]~)    
  1534.  ***************************************************************************/
  1535.  
  1536. ADD_COM_card_cnv( int  _pl )
  1537. {
  1538.     int  _lp;
  1539.  
  1540.     for ( _lp= 0;_lp<P_DATA2[_pl].Card_num;_lp++ )
  1541.  
  1542.     if ( P_DATA2[_pl].Card[_lp]<52 )
  1543.  
  1544.         ADD_work[( P_DATA2[_pl].Card[_lp] % 13 ) % 10]++;
  1545.  
  1546.     else
  1547.  
  1548.         ADD_work[10]++;
  1549. }
  1550.  
  1551. /***************************************************************************
  1552.       1~3枚のペアを収得(ADD_work[100]~)      
  1553.  ***************************************************************************/
  1554.  
  1555. ADD_COM_pick_up_pear( int  _key,int  _num,int  *_count1,int  *_count2 )
  1556. {
  1557.     int  _lp1,_lp2,_count3= 0;
  1558.  
  1559.     *_count1=*_count2= 0;
  1560.  
  1561.     for ( _lp1= 0;_lp1<10;_lp1++ ) {
  1562.  
  1563.     for ( _lp2= 0;_lp2<( ADD_work[_lp1]!= 0 && _num== 1 ? 1 : ( ADD_work[_lp1] / _num ) );_lp2++ ) {
  1564.  
  1565.         ADD_work[100+( *_count1 )++]=_lp1+ 1;
  1566.  
  1567.         if ( ( ( ( _lp1+ 1 )*_num ) % 10 )==_key ) {
  1568.  
  1569.             ADD_work[300+_count3++]=          _lp1+ 1    ;
  1570.             ADD_work[300+_count3++]=_num> 1 ? _lp1+ 1 : 0;
  1571.             ADD_work[300+_count3++]=_num> 2 ? _lp1+ 1 : 0;
  1572.         }
  1573.     }
  1574.  
  1575.     for ( _lp2= 0;_lp2<( ADD_work[_lp1] % _num );_lp2++ )
  1576.  
  1577.         ADD_work[200+( *_count2 )++]=_lp1+ 1;
  1578.     }
  1579.  
  1580.     return ( _count3/ 3 );
  1581. }
  1582.  
  1583. /***************************************************************************
  1584.               キーチェック その1              
  1585.  ***************************************************************************/
  1586.  
  1587. ADD_COM_key_check_01( int  _key,int  _num,int  _count1 )
  1588. {
  1589.     int  _lp1,_lp2,_lp3,_count2= 0,_mem1,_mem2= 0,_mem3= 0;
  1590.  
  1591.     for ( _lp1= 0;_lp1<_count1-_num+ 1;_lp1++ ) {
  1592.  
  1593.     _mem1=ADD_work[100+_lp1];
  1594.  
  1595.     for ( _lp2=_lp1+ 1;_lp2<_count1-_num+ 2;_lp2++ ) {
  1596.  
  1597.         if ( _num> 1 )
  1598.  
  1599.         _mem2=ADD_work[100+_lp2];
  1600.  
  1601.         for ( _lp3=_lp2+ 1;_lp3<_count1;_lp3++ ) {
  1602.  
  1603.         if ( _num> 2 )
  1604.  
  1605.             _mem3=ADD_work[100+_lp3];
  1606.  
  1607.         if ( ( ( _mem1+_mem2+_mem3 ) % 10 )==_key ) {
  1608.  
  1609.             ADD_work[300+_count2++]=          _mem1    ;
  1610.             ADD_work[300+_count2++]=_num> 1 ? _mem2 : 0;
  1611.             ADD_work[300+_count2++]=_num> 2 ? _mem3 : 0;
  1612.         }
  1613.         }
  1614.     }
  1615.     }
  1616.  
  1617.     return ( _count2/ 3 );
  1618. }
  1619.  
  1620. /***************************************************************************
  1621.               キーチェック その2              
  1622.  ***************************************************************************/
  1623.  
  1624. ADD_COM_key_check_02( int  _key,int  _count1,int  _count2 )
  1625. {
  1626.     int  _lp1,_lp2,_count3= 0,_mem1,_mem2;
  1627.  
  1628.     for ( _lp1= 0;_lp1<_count1;_lp1++ ) {
  1629.  
  1630.     _mem1=ADD_work[100+_lp1];
  1631.  
  1632.     for ( _lp2= 0;_lp2<_count1+_count2;_lp2++ ) {
  1633.  
  1634.         _mem2=ADD_work[_lp2<_count1 ? 100+_lp2 : 200+_lp2-_count1];
  1635.  
  1636.         if ( _lp1!=_lp2 && ( ( _mem1* 2+_mem2 ) % 10 )==_key ) {
  1637.  
  1638.         ADD_work[300+_count3++]=_mem1;
  1639.         ADD_work[300+_count3++]=_mem1;
  1640.         ADD_work[300+_count3++]=_mem2;
  1641.         }
  1642.     }
  1643.     }
  1644.  
  1645.     return ( _count3/ 3 );
  1646. }
  1647.  
  1648. /***************************************************************************
  1649.                メッセージの表示               
  1650.  ***************************************************************************/
  1651.  
  1652. PUT_message( char _num,char _tagp1,char _tagp2 )
  1653. {
  1654.     int  _bof1= 0,_bof2= 0,_bof3,_dum,_flag= 0;
  1655.     char _cnt,_buf[256];
  1656.  
  1657.     while ( _flag== 0 ) {
  1658.  
  1659.     while ( *( MOJ_WORK[_num]+_bof1 )!='$' )
  1660.  
  1661.         _buf[_bof2++]=*( MOJ_WORK[_num]+_bof1++ );
  1662.  
  1663.     _dum=( _cnt=*( MOJ_WORK[_num]+( ++_bof1 ) ) )-'0';
  1664.  
  1665.     _bof1++;
  1666.     _bof3= 0;
  1667.  
  1668.     if ( _dum>= 1 && _dum<= 2 ) {
  1669.  
  1670.         _dum=_dum== 1 ? _tagp1 : _tagp2;
  1671.  
  1672.         while ( ( _buf[_bof2]=P_DATA1[P_DATA2[_dum].Player].Name[_bof3++] )!='\0' )
  1673.  
  1674.         _bof2++;
  1675.  
  1676.     } else {
  1677.  
  1678.         _buf[_bof2]='\0';
  1679.  
  1680.         _flag= 1;
  1681.     }
  1682.     }
  1683.  
  1684.     get_window_xy( 11 );
  1685.  
  1686.     __line( _wsx+280,_wsy+ 16,143, 47,_PSET, 0,_FULL,_BETA, 0 );
  1687.  
  1688.     _buf[255]='\0';
  1689.  
  1690.     _bof1= 0;
  1691.  
  1692.     while ( _buf[_bof1]!='\0' ) {
  1693.  
  1694.     *( int * )&_buf[253]=*( int * )&_buf[_bof1];
  1695.  
  1696.     __symbol( _wsx+280+  8*( _bof1 % 18 ),_wsy+ 16+ 16*( _bof1 / 18 ),_buf+253, 1, 1,15, 0,_PSET, 0 );
  1697.  
  1698.     _bof1+= 2;
  1699.  
  1700.     beep( 440,10 );
  1701.  
  1702.     for ( _bof2= 0;_bof2<2000;_bof2++ );
  1703.     }
  1704.  
  1705.     if ( _cnt=='!' )
  1706.  
  1707.     mouse_wait(  4, 0, 8 );
  1708. }
  1709.  
  1710. /***************************************************************************
  1711.              ビープ発音(TOWNS用)           
  1712.  ***************************************************************************/
  1713.  
  1714. beep_FM( int  _freq,int  _tim )
  1715. {
  1716.     _asm {
  1717.  
  1718.         MOV     AH,05H
  1719.         MOV     BX,_tim
  1720.         MOV     DX,_freq
  1721.         INT     9EH
  1722.     }
  1723. }
  1724.  
  1725. /***************************************************************************
  1726.              ビープ発音(PC-98用)          
  1727.  ***************************************************************************/
  1728.  
  1729. beep_PC( int  _freq,int  _tim )
  1730. {
  1731.     int  _num =( int )( ( long )2457600/_freq );
  1732.     char _f_hi=( char )*  ( char * )&_num      ;
  1733.     char _f_lw=( char )*( ( char * )&_num+ 1 ) ;
  1734.  
  1735.     _asm {
  1736.  
  1737.         MOV     DX,3FDBH
  1738.         MOV     AL,_f_hi
  1739.         OUT     DX,AL
  1740.         MOV     AL,_f_lw
  1741.         OUT     DX,AL
  1742.     }
  1743.  
  1744.     printf( "\a" );
  1745. }
  1746.  
  1747. /***************************************************************************
  1748.                 ADDタイトル               
  1749.  ***************************************************************************/
  1750.  
  1751. ADD_title()
  1752. {
  1753.     MOUSE_OFF;
  1754.  
  1755.     Gput640_DISK_to_VRAM( "ADD_TITL.CG",  0,  0 );
  1756.  
  1757.     MOUSE_ON ;
  1758.  
  1759.     screen_fade_in();
  1760.  
  1761.     mouse_wait(  1, 0, 2 );
  1762.  
  1763.     screen_fade_out();
  1764.  
  1765.     __gcls();
  1766. }
  1767.  
  1768. /***************************************************************************
  1769.                ウィンドウの描画               
  1770.  ***************************************************************************/
  1771.  
  1772. window_draw( int  _win )
  1773. {
  1774.     int  _dsx1,_dsy1,_dsx2,_dsy2,_lp;
  1775.  
  1776.     switch ( _win ) {
  1777.  
  1778.     case  1 :  panel(  1,_OFF );
  1779.  
  1780.            __symbol(  24, 20," MENU ", 1, 1, 5, 0,_PSET, 0 );
  1781.            __symbol(  24, 52,"ゲーム開始", 1, 1, 3, 0,_PSET, 0 );
  1782.            __symbol(  24, 84," さよなら ", 1, 1, 3, 0,_PSET, 0 );
  1783.  
  1784.           break;
  1785.  
  1786.     case  2 :  panel(  2,_NO );
  1787.  
  1788.            for ( _lp= 0;_lp< 4;_lp++ ) {
  1789.  
  1790.                _dsx1=120+304*( _lp %  2 );
  1791.                _dsy1= 12+120*( _lp /  2 );
  1792.  
  1793.                __symbol( _dsx1,_dsy1    ,"なまえ"              , 1, 1, 3, 0,_PSET, 0 );
  1794.                __symbol( _dsx1,_dsy1+ 24,"持ち金 ¥     ", 1, 1, 3, 0,_PSET, 0 );
  1795.                __symbol( _dsx1,_dsy1+ 48,"勝敗積   勝  敗", 1, 1, 3, 0,_PSET, 0 );
  1796.                __symbol( _dsx1,_dsy1+ 72,"プレイ"              , 1, 1, 3, 0,_PSET, 0 );
  1797.            }
  1798.  
  1799.           break;
  1800.  
  1801.     case  3 :  panel(  3,_ON );
  1802.  
  1803.            for ( _lp= 0;_lp< 6;_lp++ ) {
  1804.  
  1805.                _dsx1= 48+192*( _lp %  3 );
  1806.                _dsy1=256+ 64*( _lp /  3 );
  1807.                _dsx2= 48+ 96*  _lp       ;
  1808.  
  1809.                ADD_Gcopy( _dsx1,_dsy1, 64, 64,_dsx2, 56 );
  1810.            }
  1811.  
  1812.           break;
  1813.  
  1814.     case  4 :  panel(  4,_ON );
  1815.  
  1816.            __symbol(  36, 12,"あいうえお かきくけこ さしすせそ たちつてと", 1, 1, 3, 0,_PSET, 8 );
  1817.            __symbol(  36, 40,"なにぬねの はひふへほ まみむめも やゆよ゛゜", 1, 1, 3, 0,_PSET, 8 );
  1818.            __symbol(  36, 68,"らりるれろ わをんーぁ ぃぅぇぉっ ゃゅょ"    , 1, 1, 3, 0,_PSET, 8 );
  1819.            __symbol( 516, 68,"BS CR"                                      , 1, 1, 3, 0,_PSET, 0 );
  1820.  
  1821.           break;
  1822.  
  1823.     case  5 :  panel(  5,_NO );
  1824.  
  1825.           break;
  1826.  
  1827.     case  6 :  panel(  6,_NO );
  1828.  
  1829.            __symbol(   8,  4,"EXIT", 1, 1, 3, 0,_PSET, 0 );
  1830.  
  1831.           break;
  1832.  
  1833.     case  7 :  panel(  7,_OFF );
  1834.  
  1835.            __symbol(  24, 20,"ぼちぼちゲームを始めよか? " , 1, 1, 5, 0,_PSET, 0 );
  1836.            __symbol(  20, 52,"さぁ、始めよか ちょっと待てぃ", 1, 1, 3, 0,_PSET, 0 );
  1837.  
  1838.           break;
  1839.  
  1840.     case  8 :  panel(  8,_NO );
  1841.  
  1842.           break;
  1843.  
  1844.     case  9 :  panel(  9,_NO );
  1845.  
  1846.           break;
  1847.  
  1848.     case 10 :  panel( 10,_NO );
  1849.  
  1850.           break;
  1851.  
  1852.     case 11 :  panel( 11,_OFF );
  1853.  
  1854.           break;
  1855.  
  1856.     case 12 :  panel( 12,_OFF );
  1857.  
  1858.            __symbol( 384, 44,"パ ス", 1, 1, 5, 0,_PSET, 0 );
  1859.            __symbol( 384, 68,"出 す", 1, 1, 5, 0,_PSET, 0 );
  1860.  
  1861.           break;
  1862.  
  1863.     case 13 :  panel( 13,_OFF );
  1864.  
  1865.            for ( _lp= 0;_lp< 4;_lp++ ) {
  1866.  
  1867.                __symbol( 136, 24+ 80*_lp,"名   前"              , 1, 1, 3, 0,_PSET, 0 );
  1868.                __symbol( 136, 40+ 80*_lp,"残りカード     まい", 1, 1, 3, 0,_PSET, 0 );
  1869.                __symbol( 136, 56+ 80*_lp,"精   算 ¥"          , 1, 1, 3, 0,_PSET, 0 );
  1870.                __symbol( 136, 72+ 80*_lp,"残   金 ¥"          , 1, 1, 3, 0,_PSET, 0 );
  1871.            }
  1872.  
  1873.           break;
  1874.  
  1875.     case 14 :  panel( 14,_OFF );
  1876.  
  1877.            __symbol(  24, 20,"再プレイ", 1, 1, 3, 0,_PSET, 0 );
  1878.            __symbol(  24, 52,"おしまい", 1, 1, 3, 0,_PSET, 0 );
  1879.  
  1880.           break;
  1881.     }
  1882. }
  1883.  
  1884. middle_handle()
  1885. {
  1886. }
  1887.  
  1888.              /*  sw   sx  sy  wx  wy but */
  1889. int  wind_dat[][ 7]={ { _OFF,  0,  0,  0,  0, 0 },
  1890.  
  1891.  /* TOP MENU       */ { _OFF,  8,  8,127,119, 4 },
  1892.  /* SETTING MENU 1 */ { _OFF, 16,144,607,239,44 },
  1893.  /* FACE SELECT    */ { _OFF, 24, 40,591, 95, 6 },
  1894.  /* KEY BOARD      */ { _OFF, 24, 40,591, 95,60 },
  1895.  /* NAME WINDOW    */ { _OFF, 24, 12, 79, 23, 1 },
  1896.  /* EXIT BUTTON    */ { _OFF,536, 12, 79, 23, 1 },
  1897.  /* CHECK 1        */ { _OFF,184, 48,271, 87, 3 },
  1898.  /* MAIN SCREEN 1  */ { _OFF,464,  8,159,383, 5 },
  1899.  /* MAIN SCREEN 2  */ { _OFF,  8,  8,447, 79, 3 },
  1900.  /* MAIN SCREEN 3  */ { _OFF,  8, 96,447,111, 3 },
  1901.  /* MAIN SCREEN 4  */ { _OFF,  8,216,447, 79, 1 },
  1902.  /* MAIN SCREEN 5  */ { _OFF,  8,296,447, 95, 3 },
  1903.  /* RESULT SCREEN  */ { _OFF,144, 24,351,351, 8 },
  1904.  /* END WINDOW     */ { _OFF,520,304,111, 87, 2 },
  1905.               { _OFF, 96,136,143, 39, 2 } };
  1906.  
  1907.  
  1908.              /*  sx  sy  wx  wy  st  md  en  sw   rev */
  1909. int  but_dat[][ 9] ={ {   0,  0,  0,  0,  0,  0,  0,_OFF,_OFF },
  1910.  
  1911.  /* TOP MENU       */ {  16, 48, 95, 23,  1,  0,  2,_OFF,_ON  },
  1912.               {  16, 80, 95, 23,  1,  0,  2,_OFF,_ON  },
  1913.               {  16,112, 95, 23,  0,  0,  0,_NO ,_OFF },
  1914.               {  16, 16, 95, 23,  0,  0,  0,_ON ,_OFF },
  1915.  
  1916.  /* SETTING MENU 1 */ {   8,  0,287,111,  4,  0,  8,_ON ,_ON  },
  1917.               {  16, 24, 79, 79,  1,  0,  2,_ON ,_ON  },
  1918.               { 112,  8, 63, 23,  1,  0,  2,_OFF,_ON  },
  1919.               { 112, 32, 63, 23,  1,  0,  2,_OFF,_ON  },
  1920.               { 112, 56, 63, 23,  1,  0,  2,_OFF,_ON  },
  1921.               { 112, 80, 63, 23,  1,  0,  2,_OFF,_ON  },
  1922.               { 176,  8,112, 23,  0,  0,  0,_ON ,_OFF },
  1923.               { 176, 32,112, 23,  0,  0,  0,_ON ,_OFF },
  1924.               { 176, 56,112, 23,  0,  0,  0,_ON ,_OFF },
  1925.               { 176, 80,112, 23,  0,  0,  0,_ON ,_OFF },
  1926.               {  16,  8, 79, 11,  0,  0,  0,_ON ,_OFF },
  1927.  
  1928.               { 312,  0,287,111,  4,  0,  8,_ON ,_ON  },
  1929.               { 320, 24, 79, 79,  1,  0,  2,_ON ,_ON  },
  1930.               { 416,  8, 63, 23,  1,  0,  2,_OFF,_ON  },
  1931.               { 416, 32, 63, 23,  1,  0,  2,_OFF,_ON  },
  1932.               { 416, 56, 63, 23,  1,  0,  2,_OFF,_ON  },
  1933.               { 416, 80, 63, 23,  1,  0,  2,_OFF,_ON  },
  1934.               { 480,  8,112, 23,  0,  0,  0,_ON ,_OFF },
  1935.               { 480, 32,112, 23,  0,  0,  0,_ON ,_OFF },
  1936.               { 480, 56,112, 23,  0,  0,  0,_ON ,_OFF },
  1937.               { 480, 80,112, 23,  0,  0,  0,_ON ,_OFF },
  1938.               { 320,  8, 79, 11,  0,  0,  0,_ON ,_OFF },
  1939.  
  1940.               {   8,120,287,111,  4,  0,  8,_ON ,_ON  },
  1941.               {  16,144, 79, 79,  1,  0,  2,_ON ,_ON  },
  1942.               { 112,128, 63, 23,  1,  0,  2,_OFF,_ON  },
  1943.               { 112,152, 63, 23,  1,  0,  2,_OFF,_ON  },
  1944.               { 112,176, 63, 23,  1,  0,  2,_OFF,_ON  },
  1945.               { 112,200, 63, 23,  1,  0,  2,_OFF,_ON  },
  1946.               { 176,128,112, 23,  0,  0,  0,_ON ,_OFF },
  1947.               { 176,152,112, 23,  0,  0,  0,_ON ,_OFF },
  1948.               { 176,176,112, 23,  0,  0,  0,_ON ,_OFF },
  1949.               { 176,200,112, 23,  0,  0,  0,_ON ,_OFF },
  1950.               {  16,128, 79, 11,  0,  0,  0,_ON ,_OFF },
  1951.  
  1952.               { 312,120,287,111,  4,  0,  8,_ON ,_ON  },
  1953.               { 320,144, 79, 79,  1,  0,  2,_ON ,_ON  },
  1954.               { 416,128, 63, 23,  1,  0,  2,_OFF,_ON  },
  1955.               { 416,152, 63, 23,  1,  0,  2,_OFF,_ON  },
  1956.               { 416,176, 63, 23,  1,  0,  2,_OFF,_ON  },
  1957.               { 416,200, 63, 23,  1,  0,  2,_OFF,_ON  },
  1958.               { 480,128,112, 23,  0,  0,  0,_ON ,_OFF },
  1959.               { 480,152,112, 23,  0,  0,  0,_ON ,_OFF },
  1960.               { 480,176,112, 23,  0,  0,  0,_ON ,_OFF },
  1961.               { 480,200,112, 23,  0,  0,  0,_ON ,_OFF },
  1962.               { 320,128, 79, 11,  0,  0,  0,_ON ,_OFF },
  1963.  
  1964.  /* FACE SELECT    */ {  16,  8, 79, 79,  1,  0,  2,_OFF,_ON  },
  1965.               { 112,  8, 79, 79,  1,  0,  2,_OFF,_ON  },
  1966.               { 208,  8, 79, 79,  1,  0,  2,_OFF,_ON  },
  1967.               { 304,  8, 79, 79,  1,  0,  2,_OFF,_ON  },
  1968.               { 400,  8, 79, 79,  1,  0,  2,_OFF,_ON  },
  1969.               { 496,  8, 79, 79,  1,  0,  2,_OFF,_ON  },
  1970.  
  1971.  /* KEY BOARD      */ {  32,  8, 23, 23,  1,  0,  2,_OFF,_ON  },
  1972.               {  56,  8, 23, 23,  1,  0,  2,_OFF,_ON  },
  1973.               {  80,  8, 23, 23,  1,  0,  2,_OFF,_ON  },
  1974.               { 104,  8, 23, 23,  1,  0,  2,_OFF,_ON  },
  1975.               { 128,  8, 23, 23,  1,  0,  2,_OFF,_ON  },
  1976.               { 168,  8, 23, 23,  1,  0,  2,_OFF,_ON  },
  1977.               { 192,  8, 23, 23,  1,  0,  2,_OFF,_ON  },
  1978.               { 216,  8, 23, 23,  1,  0,  2,_OFF,_ON  },
  1979.               { 240,  8, 23, 23,  1,  0,  2,_OFF,_ON  },
  1980.               { 264,  8, 23, 23,  1,  0,  2,_OFF,_ON  },
  1981.               { 304,  8, 23, 23,  1,  0,  2,_OFF,_ON  },
  1982.               { 328,  8, 23, 23,  1,  0,  2,_OFF,_ON  },
  1983.               { 352,  8, 23, 23,  1,  0,  2,_OFF,_ON  },
  1984.               { 376,  8, 23, 23,  1,  0,  2,_OFF,_ON  },
  1985.               { 400,  8, 23, 23,  1,  0,  2,_OFF,_ON  },
  1986.               { 440,  8, 23, 23,  1,  0,  2,_OFF,_ON  },
  1987.               { 464,  8, 23, 23,  1,  0,  2,_OFF,_ON  },
  1988.               { 488,  8, 23, 23,  1,  0,  2,_OFF,_ON  },
  1989.               { 512,  8, 23, 23,  1,  0,  2,_OFF,_ON  },
  1990.               { 536,  8, 23, 23,  1,  0,  2,_OFF,_ON  },
  1991.  
  1992.               {  32, 36, 23, 23,  1,  0,  2,_OFF,_ON  },
  1993.               {  56, 36, 23, 23,  1,  0,  2,_OFF,_ON  },
  1994.               {  80, 36, 23, 23,  1,  0,  2,_OFF,_ON  },
  1995.               { 104, 36, 23, 23,  1,  0,  2,_OFF,_ON  },
  1996.               { 128, 36, 23, 23,  1,  0,  2,_OFF,_ON  },
  1997.               { 168, 36, 23, 23,  1,  0,  2,_OFF,_ON  },
  1998.               { 192, 36, 23, 23,  1,  0,  2,_OFF,_ON  },
  1999.               { 216, 36, 23, 23,  1,  0,  2,_OFF,_ON  },
  2000.               { 240, 36, 23, 23,  1,  0,  2,_OFF,_ON  },
  2001.               { 264, 36, 23, 23,  1,  0,  2,_OFF,_ON  },
  2002.               { 304, 36, 23, 23,  1,  0,  2,_OFF,_ON  },
  2003.               { 328, 36, 23, 23,  1,  0,  2,_OFF,_ON  },
  2004.               { 352, 36, 23, 23,  1,  0,  2,_OFF,_ON  },
  2005.               { 376, 36, 23, 23,  1,  0,  2,_OFF,_ON  },
  2006.               { 400, 36, 23, 23,  1,  0,  2,_OFF,_ON  },
  2007.               { 440, 36, 23, 23,  1,  0,  2,_OFF,_ON  },
  2008.               { 464, 36, 23, 23,  1,  0,  2,_OFF,_ON  },
  2009.               { 488, 36, 23, 23,  1,  0,  2,_OFF,_ON  },
  2010.               { 512, 36, 23, 23,  1,  0,  2,_OFF,_ON  },
  2011.               { 536, 36, 23, 23,  1,  0,  2,_OFF,_ON  },
  2012.  
  2013.               {  32, 64, 23, 23,  1,  0,  2,_OFF,_ON  },
  2014.               {  56, 64, 23, 23,  1,  0,  2,_OFF,_ON  },
  2015.               {  80, 64, 23, 23,  1,  0,  2,_OFF,_ON  },
  2016.               { 104, 64, 23, 23,  1,  0,  2,_OFF,_ON  },
  2017.               { 128, 64, 23, 23,  1,  0,  2,_OFF,_ON  },
  2018.               { 168, 64, 23, 23,  1,  0,  2,_OFF,_ON  },
  2019.               { 192, 64, 23, 23,  1,  0,  2,_OFF,_ON  },
  2020.               { 216, 64, 23, 23,  1,  0,  2,_OFF,_ON  },
  2021.               { 240, 64, 23, 23,  1,  0,  2,_OFF,_ON  },
  2022.               { 264, 64, 23, 23,  1,  0,  2,_OFF,_ON  },
  2023.               { 304, 64, 23, 23,  1,  0,  2,_OFF,_ON  },
  2024.               { 328, 64, 23, 23,  1,  0,  2,_OFF,_ON  },
  2025.               { 352, 64, 23, 23,  1,  0,  2,_OFF,_ON  },
  2026.               { 376, 64, 23, 23,  1,  0,  2,_OFF,_ON  },
  2027.               { 400, 64, 23, 23,  1,  0,  2,_OFF,_ON  },
  2028.               { 440, 64, 23, 23,  1,  0,  2,_OFF,_ON  },
  2029.               { 464, 64, 23, 23,  1,  0,  2,_OFF,_ON  },
  2030.               { 488, 64, 23, 23,  1,  0,  2,_OFF,_ON  },
  2031.               { 512, 64, 23, 23,  1,  0,  2,_OFF,_ON  },
  2032.               { 536, 64, 23, 23,  1,  0,  2,_OFF,_ON  },
  2033.  
  2034.  /* NAME WINDOW    */ {   0,  0, 79, 23,  0,  0,  0,_ON ,_OFF },
  2035.  
  2036.  /* EXIT BUTTON    */ {   0,  0, 79, 23,  1,  0,  2,_OFF,_ON  },
  2037.  
  2038.  /* EXIT BUTTON    */ {  16, 48,119, 23,  1,  0,  2,_OFF,_ON  },
  2039.               { 136, 48,119, 23,  1,  0,  2,_OFF,_ON  },
  2040.               {  16, 16,239, 23,  0,  0,  0,_ON ,_OFF },
  2041.  
  2042.  /* MAIN SCREEN 1  */ {   0,  0,167, 63,  1,  0,  2,_OFF,_OFF },
  2043.               {   0, 64,167, 79,  0,  0,  0,_OFF,_OFF },
  2044.               {   0,144,167, 79,  0,  0,  0,_OFF,_OFF },
  2045.               {   0,224,167, 79,  0,  0,  0,_OFF,_OFF },
  2046.               {   0,304,167, 79,  0,  0,  0,_OFF,_OFF },
  2047.  
  2048.  /* MAIN SCREEN 2  */ {   0,  0,127, 79,  0,  0,  0,_ON ,_OFF },
  2049.               { 136,  0,175, 79,  0,  0,  0,_ON ,_OFF },
  2050.               { 320,  0,127, 79,  0,  0,  0,_ON ,_OFF },
  2051.  
  2052.  /* MAIN SCREEN 3  */ {   0,  0,127,111,  1,  0,  2,_OFF,_ON  },
  2053.               { 160,  0,127,111,  1,  0,  2,_OFF,_ON  },
  2054.               { 320,  0,127,111,  1,  0,  2,_OFF,_ON  },
  2055.  
  2056.  /* MAIN SCREEN 4  */ { 190,  6, 67, 67,  1,  0,  2,_ON ,_OFF },
  2057.  
  2058.  /* MAIN SCREEN 5  */ {   8, 16,351, 63,  1,  0,  2,_NO ,_OFF },
  2059.               { 376, 40, 63, 23,  1,  0,  2,_OFF,_ON  },
  2060.               { 376, 64, 63, 23,  1,  0,  2,_OFF,_ON  },
  2061.  
  2062.  /* RESULT SCREEN  */ {  32, 16, 79, 79,  0,  0,  0,_ON ,_OFF },
  2063.               { 128, 16,207, 79,  0,  0,  0,_ON ,_OFF },
  2064.               {  32, 96, 79, 79,  0,  0,  0,_ON ,_OFF },
  2065.               { 128, 96,207, 79,  0,  0,  0,_ON ,_OFF },
  2066.               {  32,176, 79, 79,  0,  0,  0,_ON ,_OFF },
  2067.               { 128,176,207, 79,  0,  0,  0,_ON ,_OFF },
  2068.               {  32,256, 79, 79,  0,  0,  0,_ON ,_OFF },
  2069.               { 128,256,207, 79,  0,  0,  0,_ON ,_OFF },
  2070.  
  2071.  /* END WINDOW     */ {  16, 16, 79, 23,  1,  0,  2,_OFF,_ON  },
  2072.               {  16, 48, 79, 23,  1,  0,  2,_OFF,_ON  }  };
  2073.  
  2074. char  PAL[16][ 3] = { {  0, 0, 0 },{  4, 4, 4 },{  6, 8,10 },{  0, 0,15 },
  2075.               {  8,10,12 },{ 15, 0, 0 },{  8, 0, 8 },{ 15,15,15 },
  2076.               { 13, 9, 5 },{  0,15, 0 },{ 15,11, 8 },{  0,15,15 },
  2077.               {  8, 8, 0 },{ 15,15, 0 },{  8, 8, 8 },{ 15,15,15 } };
  2078.  
  2079. struct PLD_1 P_DATA1[ 4] = { { "きくりん", 0, 5000, 0, 0, 0 },
  2080.                  { "たうんず", 1, 5000, 0, 0, 0 },
  2081.                  { "ふりサン", 2, 5000, 0, 0, 0 },
  2082.                  { "これサン", 3, 5000, 0, 0, 0 } };
  2083.  
  2084. char *KEY_BOARD = "あいうえおかきくけこさしすせそたちつてと" \
  2085.           "なにぬねのはひふへほまみむめもやゆよ゛゜" \
  2086.           "らりるれろわをんーぁぃぅぇぉっゃゅょ"       ;
  2087.  
  2088. char *MOJ_WORK[] = { " 人  間 ",
  2089.              "コンピュータ",
  2090.              " おやすみ ",
  2091.              "おっ、オレの番や。▼$!",
  2092.              "少し待ってくれ。▼$!",
  2093.              "これでどぉや!▼$!",
  2094.              "必殺、あびせだ!!▼$!",
  2095.              "必殺、ながしだ!!▼$!",
  2096.              "必殺、とっかえ!!▼$!",
  2097.              "あかん。パスパス。▼$!",
  2098.              "さぁさぁ、流そか。▼$!",
  2099.              "よっしゃ、上がり!▼$!",
  2100.              "どのプレイヤーにあびせましょうか。$",
  2101.              "$",
  2102.              "どのプレイヤーのカードと取り替えますか。$",
  2103.              "$1と$2のカードを取り替えだ!!▼$!",
  2104.              "これでどぉや!▼$!",
  2105.              "$1に3枚のカードをあびせた!!▼$!",
  2106.              "$1の番ですよ。$",
  2107.              "山のカードが無くなりました。▼$!",
  2108.              "このゲームは流しましょう。▼$!",
  2109.              ""
  2110. };
  2111.